// =====================================================================
//
//  This file is part of the Microsoft Dynamics CRM SDK code samples.
//
//  Copyright (C) Microsoft Corporation.  All rights reserved.
//
//  This source code is intended only as a supplement to Microsoft
//  Development Tools and/or on-line documentation.  See these other
//  materials for detailed information regarding Microsoft code samples.
//
//  THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
//  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
//  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//  PARTICULAR PURPOSE.
//
// =====================================================================
using System.Diagnostics.CodeAnalysis;
using System.Runtime.Serialization;

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Temporary;

namespace Microsoft.Crm.Sdk.Messages
{
	/// <summary>
	/// Collection of objects of AuditDetails class. 
	/// Used in returning the change data details of a given audit record
	/// </summary>
	[DataContract(Namespace = "http://schemas.microsoft.com/crm/2011/Contracts")]
	[SuppressMessage("Microsoft.Naming", "CA1711:IdentifiersShouldNotHaveIncorrectSuffix", Justification = "Consistent with SDK signature.")]
	public sealed class AuditDetailCollection : IExtensibleDataObject
	{
		/// <summary>
		/// Default constructor
		/// </summary>
		public AuditDetailCollection()
		{
			_auditDetails = new DataCollection<AuditDetail>();
		}

		/// <summary>
		/// Indexor to access the collection. 
		/// Gets or sets the element at the specified index
		/// </summary>
		public AuditDetail this[int index]
		{
			get
			{
				return _auditDetails[index];
			}
			set
			{
				_auditDetails[index] = value;
			}
		}

		/// <summary>
		/// Adds the value to the AuditDetailsArray
		/// </summary>
		/// <param name="value"></param>
		public void Add(AuditDetail auditDetail)
		{
			_auditDetails.Add(auditDetail);
		}

		/// <summary>
		/// Return the AuditDetailsArray object
		/// </summary>
		[DataMember]
		public DataCollection<AuditDetail> AuditDetails
		{
			get
			{
				if (null == this._auditDetails)
				{
					this._auditDetails = new DataCollection<AuditDetail>();
				}
				return this._auditDetails;
			}
			[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "Called via reflection")]
			private set
			{
				_auditDetails = value;
			}
		}

		/// <summary>
		/// Return the count of elements in auditdetails
		/// </summary>
		public int Count
		{
			get
			{
				return _auditDetails.Count;
			}
		}

		/// <summary>
		/// True if there are more records, otherwise False
		/// </summary>
		[DataMember]
		public bool MoreRecords { get; set; }

		/// <summary>
		/// Represents a paging cookie.
		/// </summary>
		[DataMember]
		public string PagingCookie { get; set; }

		[DataMember]
		public int TotalRecordCount { get; set; }


		#region IExtensibleDataObject Implementation
		private ExtensionDataObject _extensionDataObject;
		public ExtensionDataObject ExtensionData
		{
			get
			{
				return _extensionDataObject;
			}
			set
			{
				_extensionDataObject = value;
			}
		}
		#endregion IExtensibleDataObject Implementation
		private DataCollection<AuditDetail> _auditDetails;
	}
}
